\documentclass[a4paper,12pt]{article}

\usepackage[utf8]{inputenc}  % o pacote utf8x tá desatualizado, troquei para o utf
\usepackage[brazil]{babel}

\usepackage{graphicx}       % se for usar .ps ou .eps usar o driver [dvips]
\usepackage[margin=2.5cm]{geometry} % define as 4 margens para 2,5cm  
\linespread{1.5}            % define o espaçamamento entre linhas
\usepackage{palatino}       % fonte palatino
\usepackage{euler}          % fonte euler (só dentro do ambiente math)


%% links para a versao .pdf
%\usepackage{epstopdf}                % trabalhar com figs eps e pdf 
%\usepackage[dvips]{hyperref}         % links no arquivo pdf 
%\hypersetup{
%    breaklinks,
%    bookmarks,
%    pdfauthor={Tiago, Bruno, Mariana},
%    pdftitle={Manual do Jogo Naufragos},
%    unicode=true
%}


\title{Ep4 - Fase Final}     

\begin{document}

%%%%%%%%%%%%%%%%%%%%%%% Folha de Rosto (INICIO) %%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\thispagestyle{empty}
\begin{center}
  \vspace*{0.1cm}
  \textbf{\textsc{UNIVERSIDADE DE SÃO PAULO}}\\
  \vspace*{0,4cm}
  \textsc{INSTITUTO DE MATEMÁTICA E ESTATÍSTICA}\\
\end{center}
\vspace*{1cm}
{\renewcommand{\baselinestretch}{1.2}
  \normalsize
  \vspace{3cm}
  \begin{center}
    \begin{huge}  MAC-0211: Relatório Final\\ \end{huge}
    \vspace{2cm}
    \begin{LARGE} Naufragos \\ \end{LARGE}
    \vspace{2cm}
    \begin{large} Relatório Final\\ \end{large}
    \vspace{3cm}
    \begin{flushright}
      {\bf Integrantes do Grupo:}\\
      {Bruno Ferrero} \hspace{0.5cm} {N USP: 3690142}\\
      {Mariana Pacheco Hatamura} \hspace{0.5cm} {N USP: 4906967}\\
      {Tiago Bomventi} \hspace{0.5cm} {N USP: 3690177}\\


      {\bf Professor:}\hspace{0.3cm} {Fabio Kon}\\
    \end{flushright}
  \end{center}
\vspace{1cm}
\vfill
}
\begin{center}
  {\small S Ã O \ \ P A U L O}\\
  \large 30/06/2010
\end{center}
%%%%%%%%%%%%%%%%%%%%%%% Folha de Rosto (FIM) %%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\tableofcontents       %sumário
\thispagestyle{empty}
\newpage
\setcounter{page}{1}   %numeracao de paginas comeca aqui

\section{Introdução}

\subsection{A História}
Estamos nos primeiros anos do século $XX$. O imponente transatlântico \textit{RMS Positronic} deixa a Europa rumo ao Novo Mundo. Tudo corria bem em sua viagem, até que o navio esbarrou em um \textit{iceberg} (sim, clichê básico de tragédias marítimas). Todavia, para a felicidade dos passageiros, o navio seguia rigorosamente os protocolos de segurança e havia coletes salva-vidas para todos. Outra sorte é que era verão na época do naufrágio, dessa forma tampouco as vítimas tiveram problemas com hipotermia.

Felizmente para os passageiros, quis o destino que próximo ao naufrágio passasse o modesto navio cargueiro \textit{Asimov}. O cargueiro, que contava com dois botes, prontamente colocou-os para o resgate dos passageiros em alto-mar. 

O objetivo do jogo, é recolher o maior número possivel de naufragos com os botes de resgate do navio cargueiro \textit{Asimov}.

\subsection{A Missão}

Os jogadores devem se desviar dos perigosos recifes de corais, do contrário o bote irá encalhar e/ou naufragar.

Cada jogador controla o seu bote pressionando determinadas teclas, sendo que as teclas de cada jogador ficam nas extremidades opostas do teclado.

Quando um jogador recolhe um naufrago, este ganha $10$ pontos. Cada bote tem um número máximo de naufragos que pode levar ($11$ naufragos). Quando o bote atinge essa quantidade de naufragos resgatados, ele deve se dirigir ao navio \textit{Asimov}, chegar bem próximo dele e lançar âncora para que os passaeiros resgatados possam desembarcar. Cada passageiro desembarcado da $20$ pontos ao jogador.

\subsection{Elementos do Jogo}

Os elementos encontrados no jogo são basicamente do tipo: corais, botes, naufragos e o navio cargueiro \textit{Asimov}. Todos eles podem ser observados na figura \ref{fig:screenshot}.



\begin{figure}[ht]
    \centering
    \includegraphics[width=17cm,keepaspectratio]{screenshot.png}
    \caption{\textit{Screenshot} da tela do jogo.}
    \label{fig:screenshot}
\end{figure}



\newpage
\section{Manual do Usuário}
\subsection{Teclas do jogo}
\begin{itemize}
\item O jogador Amarelo utiliza as teclas:
\begin{itemize}
\item[$\uparrow$] Seta para Cima: acelera o barco
\item[$\downarrow$] Seta para Baixo: freia o barco
\item[$\leftarrow$]  Seta para Esquerda: gira o barco no sentido anti-horário
\item[$\rightarrow$]  Seta para Direita: gira o barco no sentido horário
\item[] Enter: lança ancora
\end{itemize}
\item O jogador Verde utiliza as seguintes teclas:
\begin{itemize}
\item[W]: acelera o barco
\item[S] freia o barco
\item[A]: gira o barco no sentido anti-horário
\item[D]: gira o barco no sentido horário
\item[Espaco]: lanca ancora
\end{itemize}
\item[ESC]: termina o jogo

\end{itemize}

\subsection{Quem é o vencedor?}

O vencedor do jogo, é o jogador que terminar com a maior quantidade de pontos.

\subsection{Instruções de compilação}

Para gerar o executável do jogo digite:
\begin{itemize}
\item[\$] \texttt{make jogo}
\end{itemize}

e depois para jogar:

\begin{itemize}
\item[\$] \texttt{./jogo [par1] [par2] [par3]}
\end{itemize}


O comando aceita nenhum, $1$, $2$, ou $3$ parâmetros de entrada, são eles:
\begin{itemize}
\item \texttt{par1} $=$ frequencia de criação de naufragos
\item \texttt{par2} $=$ velocidade média dos naufragos criados
\item \texttt{par3} $=$ semente para o random
\end{itemize}

A configuração \textit{default} do jogo:
\begin{itemize}
\item \texttt{par1} $=$ $0.5$
\item \texttt{par2} $=$ $2$
\item \texttt{par3} $=$ $time (NULL)$
\end{itemize}
\begin{itemize}
\item[Obs.] $1$ - verificar se o makefile aponta para a localização correta da  biblioteca Allegro  na sua máquina. Isso pode ser  alterado, através da  variável \texttt{LIBALLEG} no \texttt{makefile}.
\end{itemize}

\newpage
\section{Implementação}

\subsection {Algumas decisões particulares da implementação}

O sistema foi dividido em cinco modulos: oceano, fisica, item, grafico e colisao.
\begin{description}  
\item[oceano.c|h] O módulo oceano (\texttt{.c} e \texttt{.h}) cuida de toda a parte de gerenciamento do oceano e das frequencias de criação de naufragos. Tambem cuida da velocidade média deles.
\item[fisica.c|h] O módulo física (\texttt{.c} e \texttt{.h}) cuida da parte de movimentação dos naufragos e sorteios de direção.
\item[item.c|h] O módulo item contem as implementações e estrutura de dados dos itens (naufragos) presentes do jogo.
\item[grafico.c|h] O módulo gráfico (\texttt{.c} e \texttt{.h}) cuida dos desenhos na tela.
\item[colisao.c|h] O módulo colisão (\texttt{.c} e \texttt{.h}) foi feito separado do modulo física e cuidada sozinho de todas as colisões que acontecem no jogo.
\end{description}

Os naufragos tem velocidade mínima zero (ficam parados) e máxima a definir em cada eixo.
Tomar cuidado com as modificações nos limites de velocidade, pois eles podem gerar problemas no tratamento das colisões. O ideal é limitar a velocidade dos naufragos, a um deslocamento de no máximo o tamanho do seu raio. 

A detecção e o tratamento de colisão são baseadas na idéia de que devemos começar resolvendo as colisões mais próximas primeiro (colisão prioritária). Uma vez que essa colisão foi resolvida, devemos atualizar a estrutura de dados que gerencia os elementos que colidem e buscar a nova colisão mais próxima dentre todos os elementos. Não são tratadas multiplas colisões ocorrendo no mesmo ponto. As colisões multiplas em um mesmo ponto são tratadas de par em par. Aparentemente estas idéias estão funcionando sem apresentar problemas (ex: travamento do jogo).


\subsection{Testes}

Foram feitos dois tipos de testes:

\subsubsection*{teste1.c} 

Verifica se as rotinas \texttt{polarParaEuclidiano} e \texttt{euclidianoParaPolar} funcionam de acordo com o esperado. Pode-se construir um executável através de:

\begin{itemize}
\item[\$]\texttt{make teste1}
\item[\$]\texttt{./teste1}
\end{itemize}

\subsubsection*{teste2.c}

Esse teste verifica se as funções de distribuição gaussiana sorteiam um número de acordo com a frequência esperada.

\begin{itemize}
\item[\$]\texttt{make teste2}
\item[\$]\texttt{./teste2}
\end{itemize}

\newpage
\section{Conclusões}
   A conclusão mais importante do grupo foi verificar que em projetos maiores, uma boa estruturação do código pode ajudar muito. Um bom planejamento inicial (analise) poderia ter poupado algumas reuniões relacionadas à mudanças na implementação do projeto. Os integrantes por diversas vezes, tiveram dificuldades em compreender a idéia que o colega tinha implementado e isso poderia ter sido solucionado com uma boa análise inicial do problema. O grupo ficou satisfeito com o resultado do projeto e acredita que certamente irá usar as ferramentas aprendidas (controle de versão, modularização do código, documentação latex, etc.) no futuro. 

\end{document}
